package dao

import (
	"gitee.com/Luna-CY/Golang-Project-Template/internal/context"
	"gitee.com/Luna-CY/Golang-Project-Template/internal/errors"
    "gitee.com/Luna-CY/Golang-Project-Template/model"
)

// SystemSmsLog Data access object for SystemSmsLog definition
type SystemSmsLog interface {
	Transactional
	
	// FindSystemSmsLogByCondition find SystemSmsLog by simple condition from db
	FindSystemSmsLogByCondition(ctx context.Context, page int, size int, options ...SystemSmsLogOption) (int64, []*model.SystemSmsLog, errors.Error)
	
	// SaveSystemSmsLog save SystemSmsLog to db
	// if SystemSmsLog id is 0, it will create a new record, otherwise, it will update the record
	SaveSystemSmsLog(ctx context.Context, systemSmsLog *model.SystemSmsLog) errors.Error

	// TakeSystemSmsLogByCondition get SystemSmsLog by condition from db
	// if SystemSmsLog not found, return error type with errors.ErrorTypeRecordNotFound
	TakeSystemSmsLogByCondition(ctx context.Context, options ...SystemSmsLogOption) (*model.SystemSmsLog, errors.Error)

	// DeleteSystemSmsLogByCondition delete SystemSmsLog by condition from db
	DeleteSystemSmsLogByCondition(ctx context.Context, options ...SystemSmsLogOption) errors.Error

	// BatchTakeSystemSmsLogByCondition get SystemSmsLog by condition from db
	BatchTakeSystemSmsLogByCondition(ctx context.Context, options ...SystemSmsLogOption) ([]*model.SystemSmsLog, errors.Error)
}

